用户数据报协议 UDP
Table of Contents
进程间通信
IP 协议负责把数据报从源主机交付到目的主机. 这是一种不完整的交付, 因为报文没有被送到正确的进程. TCP/UDP 这些传输层协议负责进程到进程的通信.
端口号
在 C/S 架构中, 客户端进程使用端口号标识自己, 这种端口号称为 短暂端口号.
服务端进程也要用端口号标识自己, 但服务端的端口号不能随便选取, 因为随便选取的话, 客户端进程就不知道是哪个端口了. 服务端选取的端口号, 称为 熟知端口号.
UDP 的熟知端口号如下表所示:
端口 | 协议 | 描述 |
---|---|---|
7 | Echo | 把收到的数据报发回给发送端 |
9 | Discard | 丢弃收到的任何数据报 |
11 | Users | 活跃的用户 |
13 | Daytime | 返回时间 |
17 | Quote | 返回时间 |
19 | Chargen | 返回字符串 |
53 | Nameserver | 域名服务 |
67 | Bootps | 下载引导程序信息的服务器端口 |
68 | Bootpc | 下载引导程序信息的客户端端口 |
69 | TFTP | 简单文件传送协议 |
111 | RPC | 远程过程调用 |
123 | NTP | 网络时间协议 |
161 | SNMP | 简单网络管理协议 |
520 | RIP | 路由信息协议 |
套接字地址(Socket)
Socket = IP + Port. 它唯一标识了某一主机上的某一进程.
面向连接服务和面向无连接服务
面向连接服务(虚电路)
在进行数据交换前, 先建立连接, 当数据传输结束后, 释放这个连接. 具体包括以下三个阶段:
- 建立连接: 给出完整的源和目的地址.
- 数据交换: 该阶段每个报文不必包含完整的源和目的地址, 只需使用一个连接标识符来代替, 提高效率.
- 释放连接
由于面向连接服务中, 报文有序发送和接收.
面向无连接服务
每个数据报都要给出完整的源和目的地址, 开销较大.
面向无连接服务主要有三种类型:
- 数据报: 发完报文就结束, 对方不做任何响应, 可靠性较差.
- 证实交付: 对每一个报文产生一个证实给发送方, 但这种证实只能保证报文已经发送到目的站了, 不能保证对方正确接收.
- 请求回答: 接收端用户每收到一个报文, 就向发送端发送一个应答报文.
UDP 协议
UDP 协议是无连接的, 不可靠的. 在发送数据前, 不建立连接.
UDP 不提供确认, 也不对数据的到达顺序加以控制, 因此, UDP 报文可能会丢失.
报文格式
有效负载长度 = IP总长度 - IP首部长度
校验和包括伪首部, UDP首部 和 UDP数据, 该字段可选, 如果为 0, 表示不进行校验. 伪首部是 IP首部 的一部分. 如果不包括伪首部, 用户数据报也可能是安全的, 但是, 如果 IP首部 受到损伤, 则它可能被交付到错误的主机.
UDP 应用
TCP 协议是基于连接的可靠协议, 有流量控制和差错控制, 传输效率较低.
UDP 协议是基于无连接的不可靠协议, 没有控制手段, 仅仅是将数据发送给对方, 效率较高.
所以, UDP 适用于对效率要求较高, 对准确性要求较低的场景.
如:
- 即时通信(如 QQ聊天): 对准确性和丢包要求较低, 但速度必须快.
- 在线视频: 保证视频连续, 偶尔一个图像不清晰, 是可以接受的.
- 网络语音通话: 保证通话连续, 偶尔断音或串音, 是可以接受的.
Generated by Emacs 25.x(Org mode 8.x)
Copyright © 2014 - Pinvon - Powered by EGO